package br.pucminas.dao;

import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.Query;

import br.pucminas.models.Autor;
import br.pucminas.models.Editora;
import br.pucminas.models.Livro;

public class LivroDAO extends GenericDAO<Long, Livro>{

	private static final long serialVersionUID = -5927264674747201825L;

	@SuppressWarnings("unchecked")
	public List<Livro> buscaLivros(){
		Query query = super.getEntityManager().createQuery("SELECT l FROM Livro l ORDER BY l.nome, l.publicacao");
		List<Livro> livros = (List<Livro>) query.getResultList();
		return livros;
	}
	
	public Livro inserirLivro(Livro livro) throws Exception{
		super.getEntityManager().getTransaction().begin();
		super.getEntityManager().persist(livro);
		super.getEntityManager().getTransaction().commit();
		return livro;
	}
	
	public Livro atualizarLivro(Livro livro) throws Exception{
		super.getEntityManager().getTransaction().begin();
		super.getEntityManager().merge(livro);
		super.getEntityManager().getTransaction().commit();
		return livro;
	}
	
	public void excluirLivro(Livro livro) throws Exception{
		super.getEntityManager().getTransaction().begin();
		super.delete(livro);
		super.getEntityManager().getTransaction().commit(); 
	}
	
	@SuppressWarnings("unchecked")
	public List<Editora> listaEditoras() throws NoResultException, Exception{
		Query query = super.getEntityManager().createQuery("SELECT e FROM Editora e");
		List<Editora> editoras = (List<Editora>) query.getResultList();
		return editoras;
	}
	@SuppressWarnings("unchecked")
	public List<Autor> listaAutores() throws NoResultException, Exception{
		Query query = super.getEntityManager().createQuery("SELECT e FROM Autor e");
		List<Autor> autores = (List<Autor>) query.getResultList();
		return autores;
	}
}
